/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloCandidato;
import com.ipartek.formacion.gestformwww.modelo.ModeloConvocatoria;
import com.ipartek.formacion.gestformwww.modelo.beans.Candidato;
import com.ipartek.formacion.gestformwww.modelo.beans.Convocatoria;
import com.ipartek.formacion.gestformwww.modelo.beans.FiltroCandidato;
import com.ipartek.formacion.gestformwww.modelo.beans.TipoCurso;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * @version 1.0
 * @author Ainhoa y Enrique
 * Clase que crea una convocatoria a partir de la informacion del curso que se esta asociando
 */
public class CrearConvocatoriaAccion implements Accion {


    /**
     * Metodo que ejecuta la accion de crear convocatorias a partir de un curso
     * @param servlet, objeto del tipo HttpServlet
     * @param request, objeto del tipo HttpServletRequest
     * @param response, objeto del tipo HttpServletResponse
     * @return router, objeto del tipo AccionRouter que dirige a la pagina que corresponda(Inicio
     * o Principal)
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {

        String duracion = null;
        String fIni = null;
        String fFin = null;
        String conNom;
        String tipoCur;
        String curId;
        String hFin = null;
        String hIni = null;
        String conLugar;
        String durMin;
        String conActiva = null;
        Boolean crearConvocatoria=true;
        ArrayList<Candidato> candidatos = new ArrayList();
        String conObservacion;
        HttpSession sesion = request.getSession(false);
        AccionRouter router = null;
        ArrayList<String> errorm = new ArrayList<String>();
        ArrayList<String> mensajes = new ArrayList<String>();
        Convocatoria con = new Convocatoria();
        AccionServlet as = (AccionServlet) servlet;
        TipoCurso tipoCurso = new TipoCurso();
        int conId=0;
        int id = -1;
        ResourceBundle rb = (ResourceBundle) servlet.getServletContext().getAttribute("acciones-mapeo");
        FiltroCandidato filtro = new FiltroCandidato(rb);
        ModeloCandidato modeloCandidato = (ModeloCandidato) servlet.getServletContext().getAttribute("ModeloCandidato");
      //  saveAction=(String)request.getAttribute("saveAction");
        ModeloConvocatoria modelocon = (ModeloConvocatoria) servlet.getServletContext().getAttribute("ModeloConvocatoria");
        // ResourceBundle bundle = (ResourceBundle) servlet.getServletContext().getAttribute("acciones-mapeo");
        String aleatorio = (String) sesion.getAttribute("aleatorioCrearCurso");

        if (aleatorio != null) {
            if (request.getParameter("aleatorioCrearCurso") != null) {
                if (request.getParameter("aleatorioCrearCurso").equals(aleatorio)) {
                    // Si se pulsa F5 o atras el aleatorio del request será igual al de la sesión.
                    // NO debe crease un curso (ya se creo anteriormente)
                    crearConvocatoria = false;
                } else {
                    sesion.setAttribute("aleatorioCrearCurso", request.getParameter("aleatorioCrearCurso"));
                }
            }
        } else {
            sesion.setAttribute("aleatorioCrearCurso", request.getParameter("aleatorioCrearCurso"));
        }

        if (sesion.getAttribute("usuario") != null && request.getMethod().equalsIgnoreCase("POST")){
  
            
            conNom = (String) request.getParameter("conNom");
            hIni = (String) request.getParameter("conHoraInicio");
            hFin = (String) request.getParameter("conHoraFin");
            conObservacion = (String) request.getParameter("conObservacion");
            conLugar = (String) request.getParameter("conLugar");
            duracion = (String) request.getParameter("conDuracion");
            durMin = (String) request.getParameter("conDuracionMinutos");
            fIni = (String) request.getParameter("conFchaInPrev");
            fFin = (String) request.getParameter("conFchaFinPrev");
            tipoCur = (String) request.getParameter("tipoCur");
            curId = (String) request.getParameter("idCurso");
            //con.setConFechaInicioPrev(fIni);
            conActiva = (String) request.getParameter("conActiva");

            if (request.getParameter("idCon") != null) {
                con.setConId(Integer.parseInt(request.getParameter("idCon")));
            }

            if (request.getParameter("idCurso") != null) {
                con.setCurID(Integer.parseInt(request.getParameter("idCurso")));
            }

            if (!Verificador.esCorrecto(conNom)) {
                errorm.add("error-nombre-curso-incorrecto");
            } else {
                con.setConNom(conNom);
            }
            if (!Verificador.esCorrecto(tipoCur)) {
                errorm.add("error-tipo-curso-vacio");
            } else {
                tipoCurso.setTipCurId(Integer.parseInt(tipoCur));
                con.setTipoCursoId(tipoCurso.getTipCurId());

            }
            if (!Verificador.caracteresCorrectos(conLugar)) {
                errorm.add("error-lugar-curso-incorrecto");
            } else {
                con.setConLugarImpart(conLugar);
            }

            con.setConActiva(conActiva);

            if (fIni.trim().isEmpty()) {
                errorm.add("error-fecha-inicio-curso-vacio");
            } else {
                con.setConFechaInicioPrev(fIni);
            }
            if (fFin.trim().isEmpty()) {
                errorm.add("error-fecha-fin-curso-vacio");
            } else {
                con.setConFechaFinPrev(fFin);
            }
            if (!Verificador.validarHora(hIni, false)) {
                errorm.add("error-hora-inicio-curso-incorrecto");
            } else {
                con.setConHoraInicio(hIni);
            }
            if (!Verificador.validarHora(hFin, false)) {
                errorm.add("error-hora-fin-curso-incorrecto");
            } else {
                con.setConHoraFin(hFin);
            }
            if (!Verificador.numeroValido(duracion, true)) {
                errorm.add("error-duracion-curso-incorrecto");
            } else {
                con.setConDuracion(Integer.parseInt(duracion));
            }
            if (!Verificador.minutoValido(durMin)) {
                errorm.add("error-duracion-min-curso-incorrecto");
            } else {
                con.setConDuracionMin(Integer.parseInt(durMin));
            }
            con.setConObservacion(conObservacion);

            if (!Verificador.ordenFechasCorrecto(fIni, fFin)) {
                errorm.add("error-orden-fechas-curso");
            }
            if (!Verificador.ordenHorasCorrecto(hIni, hFin)) {
                errorm.add("error-orden-hora-curso");
            }
            if (errorm.isEmpty() && crearConvocatoria) {
                if ((request.getParameter("idCon")==null) || (request.getParameter("idCon").equals(""))) {
                    try {
                        conId = modelocon.crearConvocatoria(con);
                        mensajes.add("mensaje-crear-convocatoria");
                        sesion.setAttribute("mensajes", mensajes);
                        request.setAttribute("title", "v/m");
                        request.setAttribute("idCon", conId);
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(CrearConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else {
                    try {
                        conId=Integer.parseInt(request.getParameter("idCon"));
                        con.setConId(conId);
                        conId = modelocon.modificarConvocatoria(con);
                        mensajes.add("mensaje-modificar-convocatoria");
                        sesion.setAttribute("mensajes", mensajes);
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(CrearConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    
                }
       }
 
                try {
                    request.setAttribute("visualizaConvocatoria", modelocon.visualizarConvocatoria(conId));
                } catch (GestorFormacionExcepcion ex) {
                    Logger.getLogger(CrearConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                }

//                if (request.getParameter("idPestana") != null && request.getParameter("idPestana").trim().equals("1")) {
//                } else {
                    try {
                        filtro.setConvId(conId);
                        candidatos = modeloCandidato.listarCandidatos(filtro);
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(CrearConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    request.setAttribute("listaCandConv", candidatos);
                    request.setAttribute("contenido-convocatoria", "lista-candconv");
                    
//                }
            
            try {
                router = as.getFactory().getAction(as.getNombreClaseRecurso("visualizar-convocatoria-accion"), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(CrearConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(CrearConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(CrearConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
            }

            request.setAttribute("contenido", "visualiza-convocatoria");

        } else {
            router = new AccionRouter("inicio", false);
        }
        return router;
    }
}
